import GoodsItemManager from "../manager/goodsItemManager.js";
import BaseModel from "../../base/baseModel.js";

/**
 * @description 商品列表
 * @class {GoodsItemModel}
 * @extends {BaseModel} 基础模型
 * @author hhx
 * @date 2024-12-1 16:12
 * @version 0.1.2
 */
class GoodsItemModel extends BaseModel {

    /**
     * @description 店铺标题
     * @private
     * @type {string}
     */
    _title = undefined;

    /**
     * @description 商品列表模型
     * @public
     * @constructor
     * @param props {Object} 配置对象
     */
    constructor(props) {
        super(props);
    }

    /**
     * @description 实例化 商品列表模型
     * @public
     * @static
     * @param props {object} 配置对象
     * @returns {GoodsItemModel|*} 商品对象
     */
    static instance(props = {}) {
        let instance = new GoodsItemModel(props);
        instance.init(props);
        return instance;
    }

    //=========================== 内部成员 ===============================

    /**
     * @description 获取店铺名称
     * @member
     * @protected
     * @type {string} 店铺名称
     */
    get title() {
        return this._title;
    }

    /**
     * @description 设置店铺名称
     * @member
     * @protected
     * @param title {string} 店铺名称
     */
    set title(title) {
        this._title = title;
    }


    //=========================== 成员方法 ===============================

    /**
     * @description 获取店铺名称
     * @public
     * @return {string} 店铺名称
     */
    getTitle() {
        return this.title;
    }

    /**
     * @description 获取店铺名称
     * @public
     * @param title {string} 店铺名称
     */
    setTitle(title) {
        this.title = title;
    }

    /**
     * @description 是否存在店铺名称
     * @public
     * @return {Boolean} true 是 false 否
     */
    hasTitle() {
        return this.isNotEmpty(this.title);
    }


    //=========================== 基础属性 ===============================

    //=========================== 属性方法 ===============================

    //=========================== 接口方法 ===============================

    /**
     * @description 添加商品到购物车
     * @public
     * @param target {GoodsItemController} 商品列表控制器
     * @param product {Object} 商品对象
     */
    addProductToShop(target, product) {

        this.manager.addItem(product);
    }

    /**
     * @description 获取店铺商品列表
     * @public
     */
    getProductToShop() {
        return this.manager.getItems();
    }

    //=========================== 事件订阅 ===============================

    //=========================== 事件触发 ===============================

    //=========================== 创建方法 ===============================

    /**
     * @description 创建商品列表管理器
     * @protected
     */
    createManager() {
        return GoodsItemManager.instance();
    }

    //=========================== 构建方法 ===============================

    /**
     * @description 重载方法
     * @protected
     * @override
     */
    init(props) {

        super.init(props);

        //创建管理器
        this.buildManager();

    }


    /**
     * @description 构建管理器
     * @protected
     */
    buildManager() {
        let manager = this.createManager();
        this.setManager(manager);
    }

    //=========================== 重载方法 ===============================

    //=========================== 内部方法 ===============================

    //=========================== 控制方法 ===============================
}

export default GoodsItemModel;

